Introduce convenience property "GtkWidget:tooltip-text" taking care of
authorMathias Hasselmann <mathias.hasselmann@gmx.de>
Fri, 15 Jun 2007 18:24:55 +0000 (18:24 +0000)
committerMathias Hasselmann <hasselmm@src.gnome.org>
Fri, 15 Jun 2007 18:24:55 +0000 (18:24 +0000)
2007-06-15 Mathias Hasselmann <mathias.hasselmann@gmx.de>

        * docs/reference/gtk/gtk-sections.txt, gtk/gtk.symbols,
        gtk/gtkwidget.c, gtk/gtkwidget.h, tests/testtooltips.c: Introduce
        convenience property "GtkWidget:tooltip-text" taking care of escaping
        it for unwanted markup entities. Add functions to set tooltip text:
        gtk_widget_set_tooltip_text(), gtk_widget_set_tooltip_markup(),
        gtk_widget_get_tooltip_text(), gtk_widget_get_tooltip_markup().

        * gtk/gtktooltip.c, gtk/gtktooltip.h: Add gtk_tooltip_set_text()
        to set the tooltip text without using markup.

        Patches from Emmanuele Bassi (#447643).

svn path=/trunk/; revision=18142

ChangeLog
docs/reference/gtk/gtk-sections.txt
gtk/gtk.symbols
gtk/gtktooltip.c
gtk/gtktooltip.h
gtk/gtkwidget.c
gtk/gtkwidget.h
tests/testtooltips.c

index d97a89f3d1a6b6dad9b0ffc1c7a4ce7c13ecc860..76bc929cb24602cc6127f0284c8c8f0457454c16 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-06-15  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+       * docs/reference/gtk/gtk-sections.txt, gtk/gtk.symbols,
+       gtk/gtkwidget.c, gtk/gtkwidget.h, tests/testtooltips.c: Introduce
+       convenience property "GtkWidget:tooltip-text" taking care of escaping
+       it for unwanted markup entities. Add functions to set tooltip text:
+       gtk_widget_set_tooltip_text(), gtk_widget_set_tooltip_markup(),
+       gtk_widget_get_tooltip_text(), gtk_widget_get_tooltip_markup().
+
+       * gtk/gtktooltip.c, gtk/gtktooltip.h: Add gtk_tooltip_set_text()
+       to set the tooltip text without using markup.
+
 2007-06-15  Johan Dahlin  <jdahlin@async.com.br>
 
        reviewed by: Matthias Clasen
index b41ab7e3b272332be89ca2d463fd8463c3fafe00..dbf9ae11292c8ea468db498e473999bd0f12b27f 100644 (file)
@@ -4163,6 +4163,7 @@ gtk_tooltips_get_type
 <FILE>gtktooltip</FILE>
 <TITLE>GtkTooltip</TITLE>
 gtk_tooltip_set_markup
+gtk_tooltip_set_text
 gtk_tooltip_set_icon
 gtk_tooltip_set_icon_from_stock
 gtk_tooltip_set_custom
@@ -5259,6 +5260,10 @@ gtk_widget_get_action
 gtk_widget_is_composited
 gtk_widget_error_bell
 gtk_widget_keynav_failed
+gtk_widget_get_tooltip_markup
+gtk_widget_set_tooltip_markup
+gtk_widget_get_tooltip_text
+gtk_widget_set_tooltip_text
 gtk_widget_get_tooltip_window
 gtk_widget_set_tooltip_window
 gtk_widget_trigger_tooltip_query
index 0ad3de6148d07aaf41c24ecd1ff27bd1dd8600e6..22a9267b77293fca96bce7a01002569c37f26c8e 100644 (file)
@@ -4067,6 +4067,7 @@ gtk_tooltip_set_custom
 gtk_tooltip_set_icon
 gtk_tooltip_set_icon_from_stock
 gtk_tooltip_set_markup
+gtk_tooltip_set_text
 gtk_tooltip_trigger_tooltip_query
 #endif
 #endif
@@ -4637,6 +4638,8 @@ gtk_widget_get_screen
 gtk_widget_get_settings
 gtk_widget_get_size_request
 gtk_widget_get_style
+gtk_widget_get_tooltip_markup
+gtk_widget_get_tooltip_text
 gtk_widget_get_tooltip_window
 gtk_widget_get_toplevel
 gtk_widget_get_type G_GNUC_CONST
@@ -4711,6 +4714,8 @@ gtk_widget_set_sensitive
 gtk_widget_set_size_request
 gtk_widget_set_state
 gtk_widget_set_style
+gtk_widget_set_tooltip_markup
+gtk_widget_set_tooltip_text
 gtk_widget_set_tooltip_window
 gtk_widget_shape_combine_mask
 gtk_widget_input_shape_combine_mask
index 32def545790e5ecd38d181334c6baeaf6dd23108..e32b15024f35252bae43da59f8fc1ceb49e492e4 100644 (file)
@@ -214,6 +214,30 @@ gtk_tooltip_set_markup (GtkTooltip  *tooltip,
     gtk_widget_hide (tooltip->label);
 }
 
+/**
+ * gtk_tooltip_set_text:
+ * @tooltip: a #GtkTooltip
+ * @text: a text string or %NULL
+ *
+ * Sets the text of the tooltip to be @text. If @text is %NULL, the label
+ * will be hidden. See also gtk_tooltip_set_markup().
+ *
+ * Since: 2.12
+ */
+void
+gtk_tooltip_set_text (GtkTooltip  *tooltip,
+                      const gchar *text)
+{
+  g_return_if_fail (GTK_IS_TOOLTIP (tooltip));
+
+  gtk_label_set_text (GTK_LABEL (tooltip->label), text);
+
+  if (text)
+    gtk_widget_show (tooltip->label);
+  else
+    gtk_widget_hide (tooltip->label);
+}
+
 /**
  * gtk_tooltip_set_icon:
  * @tooltip: a #GtkTooltip
index fe45ac171bd05db5b9d9fadd1b9852e474bd92ef..466074fb580d40374dcad9166c494949bb562695 100644 (file)
@@ -33,6 +33,8 @@ GType gtk_tooltip_get_type (void);
 
 void gtk_tooltip_set_markup            (GtkTooltip  *tooltip,
                                        const gchar *markup);
+void gtk_tooltip_set_text              (GtkTooltip  *tooltip,
+                                        const gchar *text);
 void gtk_tooltip_set_icon              (GtkTooltip  *tooltip,
                                        GdkPixbuf   *pixbuf);
 void gtk_tooltip_set_icon_from_stock   (GtkTooltip  *tooltip,
index 1d47c8c315196838ba5625c877bc5fe664ad034f..97c242f854c09ba01f07ceb41e6b9335e913226d 100644 (file)
@@ -151,7 +151,8 @@ enum {
   PROP_EXTENSION_EVENTS,
   PROP_NO_SHOW_ALL,
   PROP_HAS_TOOLTIP,
-  PROP_TOOLTIP_MARKUP
+  PROP_TOOLTIP_MARKUP,
+  PROP_TOOLTIP_TEXT
 };
 
 typedef        struct  _GtkStateData    GtkStateData;
@@ -620,21 +621,41 @@ gtk_widget_class_init (GtkWidgetClass *klass)
                                                         P_("Whether this widget has a tooltip"),
                                                         FALSE,
                                                         GTK_PARAM_READWRITE));
-
-/**
- * GtkWidget:tooltip-markup:
- *
- * Sets the text of tooltip to be the given string, which is marked up
- * with the <link linkend="PangoMarkupFormat">Pango text markup language</link>.
- * Also see gtk_tooltip_set_markup().
- *
- * This is a convenience property which will take care of getting the
- * tooltip shown if the given string is not %NULL: #GtkWidget:has-tooltip
- * will automatically be set to %TRUE and there will be taken care of
- * #GtkWidget::query-tooltip in the default signal handler.
- *
- * Since: 2.12
- */
+  /**
+   * GtkWidget:tooltip-text:
+   *
+   * Sets the text of tooltip to be the given string.
+   *
+   * Also see gtk_tooltip_set_text().
+   *
+   * This is a convenience property which will take care of getting the
+   * tooltip shown if the given string is not %NULL: #GtkWidget:has-tooltip
+   * will automatically be set to %TRUE and there will be taken care of
+   * #GtkWidget::query-tooltip in the default signal handler.
+   *
+   * Since: 2.12
+   */
+  g_object_class_install_property (gobject_class,
+                                   PROP_TOOLTIP_TEXT,
+                                   g_param_spec_string ("tooltip-text",
+                                                        P_("Tooltip Text"),
+                                                        P_("The contents of the tooltip for this widget"),
+                                                        NULL,
+                                                        GTK_PARAM_READWRITE));
+  /**
+   * GtkWidget:tooltip-markup:
+   *
+   * Sets the text of tooltip to be the given string, which is marked up
+   * with the <link linkend="PangoMarkupFormat">Pango text markup language</link>.
+   * Also see gtk_tooltip_set_markup().
+   *
+   * This is a convenience property which will take care of getting the
+   * tooltip shown if the given string is not %NULL: #GtkWidget:has-tooltip
+   * will automatically be set to %TRUE and there will be taken care of
+   * #GtkWidget::query-tooltip in the default signal handler.
+   *
+   * Since: 2.12
+   */
   g_object_class_install_property (gobject_class,
                                   PROP_TOOLTIP_MARKUP,
                                   g_param_spec_string ("tooltip-markup",
@@ -2005,14 +2026,22 @@ gtk_widget_set_property (GObject         *object,
       gtk_widget_set_has_tooltip (widget, g_value_get_boolean (value), FALSE);
       break;
     case PROP_TOOLTIP_MARKUP:
-      tooltip_markup = g_object_get_qdata (object, quark_tooltip_markup);
       tooltip_window = g_object_get_qdata (object, quark_tooltip_window);
-
       tooltip_markup = g_value_dup_string (value);
 
       g_object_set_qdata_full (object, quark_tooltip_markup,
                               tooltip_markup, g_free);
 
+      tmp = (tooltip_window != NULL || tooltip_markup != NULL);
+      gtk_widget_set_has_tooltip (widget, tmp, FALSE);
+      break;
+    case PROP_TOOLTIP_TEXT:
+      tooltip_window = g_object_get_qdata (object, quark_tooltip_window);
+      tooltip_markup = g_markup_escape_text (g_value_get_string (value), -1);
+
+      g_object_set_qdata_full (object, quark_tooltip_markup,
+                               tooltip_markup, g_free);
+
       tmp = (tooltip_window != NULL || tooltip_markup != NULL);
       gtk_widget_set_has_tooltip (widget, tmp, FALSE);
       break;
@@ -2113,6 +2142,25 @@ gtk_widget_get_property (GObject         *object,
     case PROP_HAS_TOOLTIP:
       g_value_set_boolean (value, GPOINTER_TO_UINT (g_object_get_qdata (object, quark_has_tooltip)));
       break;
+    case PROP_TOOLTIP_TEXT:
+      {
+        gchar *escaped = g_object_get_qdata (object, quark_tooltip_markup);
+        if (!escaped)
+          g_value_set_string (value, NULL);
+        else
+          {
+            gchar *text;
+
+            if (pango_parse_markup (escaped, -1, 0, NULL, &text, NULL, NULL))
+              {
+                g_value_set_string (value, text);
+                g_free (text);
+              }
+            else
+              g_value_set_string (value, NULL);
+          }
+      }
+      break;
     case PROP_TOOLTIP_MARKUP:
       g_value_set_string (value, g_object_get_qdata (object, quark_tooltip_markup));
       break;
@@ -8854,6 +8902,99 @@ gtk_widget_trigger_tooltip_query (GtkWidget *widget)
   gtk_tooltip_trigger_tooltip_query (gtk_widget_get_display (widget));
 }
 
+/**
+ * gtk_widget_set_tooltip_text:
+ * @widget: a #GtkWidget
+ * @text: the contents of the tooltip for @widget
+ *
+ * Sets @text as the contents of the tooltip. This function will take
+ * care of setting GtkWidget:has-tooltip to %TRUE and of the default
+ * handler for the GtkWidget::query-tooltip signal.
+ *
+ * See also the GtkWidget:tooltip-text property and gtk_tooltip_set_text().
+ *
+ * Since: 2.12
+ */
+void
+gtk_widget_set_tooltip_text (GtkWidget   *widget,
+                             const gchar *text)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  g_object_set (G_OBJECT (widget), "tooltip-text", text, NULL);
+}
+
+/**
+ * gtk_widget_get_tooltip_text:
+ * @widget: a #GtkWidget
+ *
+ * Gets the contents of the tooltip for @widget.
+ *
+ * Return value: the tooltip text, or %NULL. You should free the
+ *   returned string with g_free() when done.
+ *
+ * Since: 2.12
+ */
+gchar *
+gtk_widget_get_tooltip_text (GtkWidget *widget)
+{
+  gchar *text = NULL;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+  g_object_get (G_OBJECT (widget), "tooltip-text", &text, NULL);
+
+  return text;
+}
+
+/**
+ * gtk_widget_set_tooltip_markup:
+ * @widget: a #GtkWidget
+ * @markup: the contents of the tooltip for @widget, or %NULL
+ *
+ * Sets @markup as the contents of the tooltip, which is marked up with
+ *  the <link linkend="PangoMarkupFormat">Pango text markup language</link>.
+ *
+ * This function will take care of setting GtkWidget:has-tooltip to %TRUE
+ * and of the default handler for the GtkWidget::query-tooltip signal.
+ *
+ * See also the GtkWidget:tooltip-markup property and
+ * gtk_tooltip_set_markup().
+ *
+ * Since: 2.12
+ */
+void
+gtk_widget_set_tooltip_markup (GtkWidget   *widget,
+                               const gchar *markup)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  g_object_set (G_OBJECT (widget), "tooltip-markup", markup, NULL);
+}
+
+/**
+ * gtk_widget_get_tooltip_markup:
+ * @widget: a #GtkWidget
+ *
+ * Gets the contents of the tooltip for @widget.
+ *
+ * Return value: the tooltip text, or %NULL. You should free the
+ *   returned string with g_free() when done.
+ *
+ * Since: 2.12
+ */
+gchar *
+gtk_widget_get_tooltip_markup (GtkWidget *widget)
+{
+  gchar *text = NULL;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+  g_object_get (G_OBJECT (widget), "tooltip-markup", &text, NULL);
+
+  return text;
+}
+
 
 #define __GTK_WIDGET_C__
 #include "gtkaliasdef.c"
index efb2b7324434ec91e7b18d49e1ba294c4124dfa3..7d88d62ab6ca17719208370c7b477173674fb0da 100644 (file)
@@ -787,11 +787,16 @@ void   gtk_widget_add_mnemonic_label    (GtkWidget *widget,
 void   gtk_widget_remove_mnemonic_label (GtkWidget *widget,
                                         GtkWidget *label);
 
-void            gtk_widget_set_tooltip_window    (GtkWidget *widget,
-                                                 GtkWindow *custom_window);
-GtkWindow      *gtk_widget_get_tooltip_window    (GtkWidget *widget);
-void            gtk_widget_trigger_tooltip_query (GtkWidget *widget);
-
+void                  gtk_widget_set_tooltip_window    (GtkWidget   *widget,
+                                                        GtkWindow   *custom_window);
+GtkWindow *gtk_widget_get_tooltip_window    (GtkWidget   *widget);
+void       gtk_widget_trigger_tooltip_query (GtkWidget   *widget);
+void       gtk_widget_set_tooltip_text      (GtkWidget   *widget,
+                                             const gchar *text);
+gchar *    gtk_widget_get_tooltip_text      (GtkWidget   *widget);
+void       gtk_widget_set_tooltip_markup    (GtkWidget   *widget,
+                                             const gchar *markup);
+gchar *    gtk_widget_get_tooltip_markup    (GtkWidget   *widget);
 
 GType           gtk_requisition_get_type (void) G_GNUC_CONST;
 GtkRequisition *gtk_requisition_copy     (const GtkRequisition *requisition);
index 35652117c87404e4228dec8b6927dbaccdd9fb95..3a94c4438beb5a46bfad2e1e8cac27f0780a173b 100644 (file)
@@ -83,7 +83,7 @@ query_tooltip_text_view_cb (GtkWidget  *widget,
     }
 
   if (gtk_text_iter_has_tag (&iter, tag))
-    gtk_tooltip_set_markup (tooltip, "Tooltip on text tag");
+    gtk_tooltip_set_text (tooltip, "Tooltip on text tag");
   else
    return FALSE;
 
@@ -286,7 +286,7 @@ main (int argc, char *argv[])
 
   /* A check button using the tooltip-markup property */
   button = gtk_check_button_new_with_label ("This one uses the tooltip-markup property");
-  g_object_set (button, "tooltip-markup", "Hello, I am a static tooltip.", NULL);
+  gtk_widget_set_tooltip_text (button, "Hello, I am a static tooltip.");
   gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
 
   /* A check button using the query-tooltip signal */
@@ -299,13 +299,13 @@ main (int argc, char *argv[])
   /* A label */
   button = gtk_label_new ("I am just a label");
   gtk_label_set_selectable (GTK_LABEL (button), FALSE);
-  g_object_set (button, "tooltip-markup", "Label tooltip", NULL);
+  gtk_widget_set_tooltip_text (button, "Label & and tooltip");
   gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
 
   /* A selectable label */
   button = gtk_label_new ("I am a selectable label");
   gtk_label_set_selectable (GTK_LABEL (button), TRUE);
-  g_object_set (button, "tooltip-markup", "Another Label tooltip", NULL);
+  gtk_widget_set_tooltip_markup (button, "<b>Another</b> Label tooltip");
   gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
 
   /* Another one, with a custom tooltip window */
@@ -325,7 +325,7 @@ main (int argc, char *argv[])
   /* An insensitive button */
   button = gtk_button_new_with_label ("This one is insensitive");
   gtk_widget_set_sensitive (button, FALSE);
-  g_object_set (button, "tooltip-markup", "Insensitive!", NULL);
+  g_object_set (button, "tooltip-text", "Insensitive!", NULL);
   gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
 
   /* Testcases from Kris without a tree view don't exist. */
@@ -347,7 +347,7 @@ main (int argc, char *argv[])
   /* Set a tooltip on the column */
   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), 0);
   gtk_tree_view_column_set_clickable (column, TRUE);
-  g_object_set (column->button, "tooltip-markup", "Header", NULL);
+  g_object_set (column->button, "tooltip-text", "Header", NULL);
 
   gtk_box_pack_start (GTK_BOX (box), tree_view, FALSE, FALSE, 2);